package Test3;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.channels.NonReadableChannelException;
import java.sql.Connection;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
import java.util.Scanner;

//1,一个停车场,内有多个车位,可停入各种车辆
//2·只有具备车牌并高度低于
//3米的车辆可停入3,停入时开始计费,按每小时2元
//4,查询全部停车位的状态
//5,按车牌及停车位号取车,取车时收停车费,查询统计全部的收费记录
public class Function {

	static JDBCUile jdbcUile = new JDBCUile();
	static Scanner scanner = new Scanner(System.in);
	// 初始化

	public static void initialize() {

		jdbcUile.insertParkingState();
		System.out.println("信息初始化成功");
	}

	// 增加车辆信息

	public void addCar() {

		while (true) {
			System.out.println("请输入车牌");
			String carId = scanner.nextLine();
			System.out.println("请输入车高");
			double high = Double.parseDouble(scanner.nextLine());
			Car car = new Car();
			car.setHigh(high);
			car.setId(carId);
			jdbcUile.insertSingleCar(car);
			System.out.println("添加成功是否继续添加?(yes/no)");
			String flag = scanner.nextLine();
			if ("no".equals(flag)) {
				break;

			}

		}

	}

	// 汽车停车
	// 条件1： 停车场有车位 2：车的高度小于3
	// 操作： 2. 设置停车时时间 3//设置停车位号状态
	public void CarPaking() {
		System.out.println("请输入车牌号");
		String carId = scanner.nextLine();
        
		double high = jdbcUile.selectCarHigh(carId);
       if(high==0) {
    	   System.out.println("对不起没有找到该车");
       }else	if (high < 3) {
			int sumSpace = jdbcUile.selectAllSpace();

			if (sumSpace > 0) {
				// 添加停车记录
				System.out.println("请输入停车时间 格式为(yyyy-MM-dd HH:mm:ss SSS)");
				String timeStart = scanner.nextLine();
				System.out.println("请输入车位号");
				int spaceId = Integer.parseInt(scanner.nextLine());
				Record record = new Record();
				record.setCarId(carId);
				record.setSpaceId(spaceId);
				record.setTimeStart(timeStart);
				record.setCost(0);
				record.setTimeEnd(null);

				jdbcUile.insertSingleRecord(record);
				// 设置新的停车场状态
				jdbcUile.updateSpaceState("占用", spaceId);
				System.out.println("停车成功");

			} else {

				System.out.println("对不起，没有车位啦");
			}

		} else {
			System.out.println("对不起您的车太高了，根本停不下呢。");
		}

	}

	// 查询全部停车位的状态
	public void findAllState() throws Exception {

	

		int space = jdbcUile.selectAllSpace();
		System.out.println("停车场空闲车位共有：  " + space);
		
	    ArrayList<Parkinglot> parkinglots = jdbcUile.selectAllSpaceState();
		if (parkinglots == null) {
			System.out.println("没有记录");
		}else {
			for(Parkinglot parkinglot :parkinglots) {
				int spaceId = parkinglot.getSpaceId();
				String state = parkinglot.getState();
				
				System.out.println("停车位 ："+spaceId+"号 ，状态为 ：" +state);
			}
			
			
		}
	}

	// 取车操作 按车牌及停车位号取车,取车时收停车费
	public void GetCar() {

		System.out.println("请输入车牌号");
		String id = scanner.nextLine();
		System.out.println("请输入停车场号");
		int space_id = Integer.parseInt(scanner.nextLine());
		Record record = new Record();
		record.setCarId(id);
		record.setSpaceId(space_id);
		record = jdbcUile.selectSingleCar(record);
		boolean falg = false;
		// 判断车牌号和停车位是否准确
		if (record != null) {
			falg = true;
			System.out.println("请输入取车时间(yyyy-MM-dd HH:mm:ss SSS)");
			String timeEnd = scanner.nextLine();

			// 设置取车时间
			record.setTimeEnd(timeEnd);

			// 计算车费
			String timeStart = record.getTimeStart();
			Calendar calendar1 = Calendar.getInstance();

			try {
				calendar1.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").parse(timeEnd));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
//				System.out.println(calendar1.getTimeInMillis());

			long H1 = calendar1.getTimeInMillis();
//				System.out.println(H1);
			Calendar calendar2 = Calendar.getInstance();
			try {
				// 将时间字符串格式转化为毫秒
				calendar2.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").parse(timeStart));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			long H2 = calendar2.getTimeInMillis();

			// 把时间转化为小时
			double time1 = (H1 - H2) / 1000 / 60 / 60.0;

			// 利用bigdecimal 保留两位数（向上取整）
			BigDecimal bigDecimal = new BigDecimal(time1);
			double time = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

			System.out.println("停车时长为： " + time);
			double cost = time * 2;
			System.out.println("本次消费为： " + cost + " 元");
			record.setCost(cost);
			// 停车场号的 状态变为空闲

			jdbcUile.updateSpaceState("空闲", space_id);

			// 停车场记录
			jdbcUile.updateRecord(record);

		} else {
			System.out.println("对不起，不找到您所描述的车辆");
		}

	}

	// 查询全部的收费记录
	public void finAllCost() throws Exception {

	 

		ArrayList<Record> records = jdbcUile.findAllRecord();
		for(Record record :records) {
			String carId = record.getCarId();
			int spaceId = record.getSpaceId();
			String timeStart = record.getTimeStart();
			String timeEnd = record.getTimeEnd();
			double cost = record.getCost();
			if(timeEnd ==null) {
			System.out.println("车牌号: "+carId +" 停车位 "+spaceId +" 停车时间：" +timeStart+" 未取车"  );
			}else{
				System.out.println("车牌号: "+carId +" 停车位 "+spaceId +" 停车时间：" +timeStart+" 取车时间"+timeEnd +"一共消费 : "+cost);
			}
		}
		
		
	
	}

	// 菜单展示
	public void showMenu() {
		System.out.println("********  首次登录必须初始化信息 ********");
		System.out.println("******** 1.初始化信息      ********");
		System.out.println("******** 2.添加车辆        ********");
		System.out.println("******** 3.停车           ********");
		System.out.println("******** 4.取车           ********");
		System.out.println("******** 5.查询所有停车场状态 ********");
		System.out.println("******** 6.查询所有收费信息   ********");

	}

	// 菜单选择栏
	public void chooseMenu() throws Exception {
		while (true) {
			showMenu();
			System.out.println("请输入您要选择的功能");
			String choose = scanner.nextLine();
			switch (choose) {
			case "1": {
				initialize();
				break;
			}
			case "2": {
				addCar();
				break;
			}
			case "3": {
				CarPaking();
				break;
			}
			case "4": {
				GetCar();
				break;
			}
			case "5": {
				findAllState();
				break;
			}
			case "6": {
				finAllCost();
				break;
			}
		
			default:
				throw new IllegalArgumentException("输入错误 ");
			}

			System.out.println("退出请输入 # ,继续请输入任意键");
			String flag = scanner.nextLine();
			if ("#".equals(flag)) {
				break;
			}
		}
	}

}
